// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()
// 初始化数据库
const db = cloud.database()

// 1. 使用request
const rp = require('request-promise')

const URL = 'http://musicapi.xiecheng.live/personalized'

const playlistCollection = db.collection('playlist')

const MAX_LIMIT = 100
// 云函数入口函数
/**
 * 异步操作结束将返回结果 赋值 playlist
 */
exports.main = async (event, context) => {
  // 1. 取到当前云数据库所有数据(云函数100 小程序每次最多获取20条)
  // const list = await playlistCollection.get()
  const countResult = await playlistCollection.count()
  const total = countResult.total
  // 向上取整获取总的次数
  const batchTimes = Math.ceil(total / MAX_LIMIT)

  // 存放每个promise 对象
  const tasks = []
  for(let i = 0; i < batchTimes; i++){
    // 从第几条开始
    let promise = playlistCollection.skip(i* MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }
  let list = {
    data: []
  }
  // 等待所有任务都执行, 完成数据多次获取
  if(tasks.length > 0){
    // 累加(之前值, 当前值)
    list = (await Promise.all(tasks)).reduce((acc, cur) => {
      return{
        data: acc.data.concat(cur.data)
      }
    })
  }


  // 2. 当前需要插入到云数据库数据
  const playlist = await rp(URL).then((res) => {
    return JSON.parse(res).result
  })

  const newData = []
  // 3. 数据去重
  for(let i = 0, len1 = playlist.length; i < len1; i++){
    // true 表示当前数据不重复
    let flag = true
    for(let j = 0, len2 = list.data.length; j < len2; j++){
      if(playlist[i].id === list.data[j].id){
        flag = false
        break
      }
    }
    if(flag){
      newData.push(playlist[i])
    }
  }

  // console.log(playlist)
  // 将结果循环遍历 插入到云数据库
  for(let i = 0, len = newData.length; i < len; i++){
    await playlistCollection.add({
      data: {
        ...newData[i],
        createTime: db.serverDate()
      }
    }).then((res) => {
      console.log('插入成功')
    }).catch((err) => {
      console.error('插入失败')
    })
  }

  // 云函数返回值 每次新增数据长度
  return newData.length
}